﻿using System;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace Website.Games.Bound;

public partial class Bound
{
	public readonly BlazorConsole Console = new();

	public async Task Run()
	{

		((int Left, int Top) StartPosition, (string Map, TimeSpan Delay)[])[] levels =
		[
			#region level 00
			((15, 16),
			new (string Map, TimeSpan Delay)[]
			{
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.1)),
			}),
			#endregion
			#region level 01
			((12, 16),
			new (string Map, TimeSpan Delay)[]
			{
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║##### #║
				            ║#     #║
				            ║# #####║
				            ║#     #║
				            ║##### #║
				            ║#     #║
				            ║# #####║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.1)),
			}),
			#endregion
			#region level 02
			((15, 16),
			new (string Map, TimeSpan Delay)[]
			{
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
			}),
			#endregion
			#region level 03
			((15, 16),
			new (string Map, TimeSpan Delay)[]
			{
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.4)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.4)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.4)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.4)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.4)),
			}),
			#endregion
			#region level 04
			((15, 16),
			new (string Map, TimeSpan Delay)[]
			{
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(1)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(1)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║#######║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.2)),
			}),
			#endregion
			#region level 05
			((4, 8),
			new (string Map, TimeSpan Delay)[]
			{
				("""
		
				      ╔═════════╗
				      ║   ###   ║
				      ║   ###   ║
				      ║   ╔═╗###║
				      ╚═══╝ ║###║
				      ╔═══╗ ║###║
				      ║ @ ╚═╝###║
				      ║         ║
				      ║         ║
				      ╚═════════╝
				""", TimeSpan.FromSeconds(1.33)),
				("""
		
				      ╔═════════╗
				      ║         ║
				      ║         ║
				      ║   ╔═╗###║
				      ╚═══╝ ║###║
				      ╔═══╗ ║###║
				      ║ @ ╚═╝###║
				      ║   ###   ║
				      ║   ###   ║
				      ╚═════════╝
				""", TimeSpan.FromSeconds(1.33)),
				("""
		
				      ╔═════════╗
				      ║   ###   ║
				      ║   ###   ║
				      ║   ╔═╗   ║
				      ╚═══╝ ║   ║
				      ╔═══╗ ║   ║
				      ║ @ ╚═╝   ║
				      ║   ###   ║
				      ║   ###   ║
				      ╚═════════╝
				""", TimeSpan.FromSeconds(1.77)),
			}),
			#endregion
			#region level 06
			((12, 16),
			new (string Map, TimeSpan Delay)[]
			{
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║###### ║
				            ║##### #║
				            ║#### ##║
				            ║### ###║
				            ║## ####║
				            ║# #####║
				            ║ ######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(1)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║###### ║
				            ║#####  ║
				            ║####  #║
				            ║###  ##║
				            ║##  ###║
				            ║#  ####║
				            ║  #####║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.75)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║###### ║
				            ║##### #║
				            ║#### ##║
				            ║### ###║
				            ║## ####║
				            ║# #####║
				            ║ ######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(1)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║#####  ║
				            ║####  #║
				            ║###  ##║
				            ║##  ###║
				            ║#  ####║
				            ║  #####║
				            ║ ######║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.75)),
			}),
			#endregion
			#region level 07
			((14, 19),
			new (string Map, TimeSpan Delay)[]
			{
				("""
		
				         ╔═════════════════╗
				         ║         @       ║
				         ║                 ║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#######   #######║
				         ║#######   #######║
				         ║#######   #######║
				         ║#################║
				         ║#################║
				         ║##   ############║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║         @       ║
				         ║                 ║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#######   #######║
				         ║#######   #######║
				         ║#######   #######║
				         ║##   ############║
				         ║##   ############║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║         @       ║
				         ║                 ║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║########   ######║
				         ║########   ######║
				         ║##   ###   ######║
				         ║##   ############║
				         ║##   ############║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║         @       ║
				         ║                 ║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#########   #####║
				         ║##   ####   #####║
				         ║##   ####   #####║
				         ║##   ############║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║         @       ║
				         ║                 ║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║##   #####   ####║
				         ║##   #####   ####║
				         ║##   #####   ####║
				         ║#################║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║         @       ║
				         ║                 ║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║##   ############║
				         ║##   ######   ###║
				         ║##   ######   ###║
				         ║###########   ###║
				         ║#################║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║         @       ║
				         ║                 ║
				         ║#################║
				         ║#################║
				         ║##   ############║
				         ║##   ############║
				         ║##   #######   ##║
				         ║############   ##║
				         ║############   ##║
				         ║#################║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║         @       ║
				         ║                 ║
				         ║#################║
				         ║##   ############║
				         ║##   ############║
				         ║##   #######   ##║
				         ║############   ##║
				         ║############   ##║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║         @       ║
				         ║                 ║
				         ║#################║
				         ║###   ###########║
				         ║###   ######   ##║
				         ║###   ######   ##║
				         ║############   ##║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║         @       ║
				         ║                 ║
				         ║#################║
				         ║####   #####   ##║
				         ║####   #####   ##║
				         ║####   #####   ##║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║         @       ║
				         ║                 ║
				         ║############   ##║
				         ║#####   ####   ##║
				         ║#####   ####   ##║
				         ║#####   #########║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║         @       ║
				         ║                 ║
				         ║############   ##║
				         ║######   ###   ##║
				         ║######   ########║
				         ║######   ########║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║         @       ║
				         ║                 ║
				         ║############   ##║
				         ║#######   #######║
				         ║#######   #######║
				         ║#######   #######║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║         @       ║
				         ║                 ║
				         ║#################║
				         ║#################║
				         ║#######   #######║
				         ║#######   #######║
				         ║#######   #######║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
			}),
			#endregion
			#region level 08
			((9, 17),
			new (string Map, TimeSpan Delay)[]
			{
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║######   ########║
				         ║######   ########║
				         ║############   ##║
				         ║############   ##║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#######   #######║
				         ║#######   #######║
				         ║###########   ###║
				         ║###########   ###║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║########   ######║
				         ║########   ######║
				         ║##########   ####║
				         ║##########   ####║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#########   #####║
				         ║#########   #####║
				         ║#########   #####║
				         ║#########   #####║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║##########   ####║
				         ║##########   ####║
				         ║########   ######║
				         ║########   ######║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║###########   ###║
				         ║###########   ###║
				         ║#######   #######║
				         ║#######   #######║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║############   ##║
				         ║############   ##║
				         ║######   ########║
				         ║######   ########║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║###########   ###║
				         ║###########   ###║
				         ║#####   #########║
				         ║#####   #########║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║##########   ####║
				         ║##########   ####║
				         ║####   ##########║
				         ║####   ##########║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#########   #####║
				         ║#########   #####║
				         ║###   ###########║
				         ║###   ###########║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║########   ######║
				         ║########   ######║
				         ║##   ############║
				         ║##   ############║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#######   #######║
				         ║#######   #######║
				         ║###   ###########║
				         ║###   ###########║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║######   ########║
				         ║######   ########║
				         ║####   ##########║
				         ║####   ##########║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#####   #########║
				         ║#####   #########║
				         ║#####   #########║
				         ║#####   #########║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║####   ##########║
				         ║####   ##########║
				         ║######   ########║
				         ║######   ########║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║###   ###########║
				         ║###   ###########║
				         ║#######   #######║
				         ║#######   #######║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║##   ############║
				         ║##   ############║
				         ║########   ######║
				         ║########   ######║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║###   ###########║
				         ║###   ###########║
				         ║#########   #####║
				         ║#########   #####║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║####   ##########║
				         ║####   ##########║
				         ║##########   ####║
				         ║##########   ####║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#####   #########║
				         ║#####   #########║
				         ║###########   ###║
				         ║###########   ###║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.3)),
			}),
			#endregion
			#region level 09
			((15, 16),
			new (string Map, TimeSpan Delay)[]
			{
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║ # # # ║
				            ║# # # #║
				            ║ # # # ║
				            ║# # # #║
				            ║ # # # ║
				            ║# # # #║
				            ║ # # # ║
				            ║# # # #║
				            ║ # # # ║
				            ║# # # #║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(1)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.25)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║# # # #║
				            ║ # # # ║
				            ║# # # #║
				            ║ # # # ║
				            ║# # # #║
				            ║ # # # ║
				            ║# # # #║
				            ║ # # # ║
				            ║# # # #║
				            ║ # # # ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(1)),
				("""
		
				            ╔═══════╗
				            ║   @   ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ║       ║
				            ╚═══════╝
				""", TimeSpan.FromSeconds(.25)),
			}),
			#endregion
			#region level 10
			((14, 14),
			new (string Map, TimeSpan Delay)[]
			{
				("""
		
				         ╔═════════╗
				         ║    @    ║
				         ║         ║
				         ║ ####### ║
				         ║# ##### #║
				         ║## ### ##║
				         ║### # ###║
				         ║#### ####║
				         ║### # ###║
				         ║## ### ##║
				         ║# ##### #║
				         ║ ####### ║
				         ║         ║
				         ║         ║
				         ╚═════════╝
				""", TimeSpan.FromSeconds(.8)),
				("""
		
				         ╔═════════╗
				         ║    @    ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ╚═════════╝
				""", TimeSpan.FromSeconds(.33)),
				("""
		
				         ╔═════════╗
				         ║    @    ║
				         ║         ║
				         ║# ##### #║
				         ║ # ### # ║
				         ║# # # # #║
				         ║## # # ##║
				         ║### # ###║
				         ║## # # ##║
				         ║# # # # #║
				         ║ # ### # ║
				         ║# ##### #║
				         ║         ║
				         ║         ║
				         ╚═════════╝
				""", TimeSpan.FromSeconds(.8)),
				("""
		
				         ╔═════════╗
				         ║    @    ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ║         ║
				         ╚═════════╝
				""", TimeSpan.FromSeconds(.33)),
			}),
			#endregion
			#region level 11
			((14, 18),
			new (string Map, TimeSpan Delay)[]
			{
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#########   #####║
				         ║#########   #####║
				         ║#########   #####║
				         ║#########   #####║
				         ║#################║
				         ║#   #############║
				         ║#   #############║
				         ║#   #############║
				         ║#   #############║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(1.75)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#   #############║
				         ║#   #############║
				         ║#   #############║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(1.75)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#################║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(1.75)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#############   #║
				         ║#############   #║
				         ║#############   #║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(1.75)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#################║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(1.75)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#################║
				         ║###   ###########║
				         ║###   ###########║
				         ║###   ###########║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(1.75)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#################║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(1.75)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#################║
				         ║#########   #####║
				         ║#########   #####║
				         ║#########   #####║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(1.75)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#################║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#               #║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(1.75)),
			}),
			#endregion
			#region level 12
			((14, 18),
			new (string Map, TimeSpan Delay)[]
			{
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#################║
				         ║#################║
				         ║## ## ###########║
				         ║## ## # ####  ###║
				         ║####### #########║
				         ║###########  ####║
				         ║#################║
				         ║######  ####  ###║
				         ║## ##############║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.5)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#################║
				         ║## ##############║
				         ║## ##############║
				         ║##### #  ####  ##║
				         ║##### ###########║
				         ║##########  #####║
				         ║#################║
				         ║## ####  ####  ##║
				         ║## ##############║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.5)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#################║
				         ║##  #############║
				         ║############## ##║
				         ║########  #### ##║
				         ║##### ###########║
				         ║##### ###  ######║
				         ║## ########### ##║
				         ║## #####  #### ##║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.5)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║#################║
				         ║###  ######### ##║
				         ║############## ##║
				         ║#########  ######║
				         ║#################║
				         ║## ## ##  #### ##║
				         ║## ## ######## ##║
				         ║#########  ######║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.5)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║############## ##║
				         ║####  ######## ##║
				         ║#################║
				         ║##########  #####║
				         ║## ##############║
				         ║## ####  ####  ##║
				         ║##### ###########║
				         ║##### ####  #####║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.5)),
				("""
		
				         ╔═════════════════╗
				         ║        @        ║
				         ║                 ║
				         ║############## ##║
				         ║##### ###########║
				         ║##### ###########║
				         ║## ########  ####║
				         ║## #### #########║
				         ║####### ####  ###║
				         ║#################║
				         ║#####  ####  ####║
				         ║#################║
				         ║                 ║
				         ║                 ║
				         ╚═════════════════╝
				""", TimeSpan.FromSeconds(.5)),
			}),
			#endregion
		];

		try
		{
			bool escape = false;
			int lives = 100;
			int frame = 0;
			int levelIndex = 0;
			((int Left, int Top) StartPosition, (string Map, TimeSpan Delay)[] Frames) level = levels[levelIndex];
			(int Top, int Left) position = level.StartPosition;
			ConsoleKey lastMovementKey = ConsoleKey.UpArrow;
			Console.CursorVisible = false;
			await Console.Clear();
			while (!escape)
			{
			NextLevel:
				level = levels[levelIndex];
				Console.CursorVisible = false;
				await Console.SetCursorPosition(0, 0);
				await Console.WriteLine();
				await Console.WriteLine("  Bound");
				await Console.WriteLine();
				await Console.WriteLine($"  Lives: {lives}   ");
				await Console.WriteLine($"  Level: {levelIndex}");
				int mapTop = Console.CursorTop;
				await Console.Write(level.Frames[frame].Map);
				string[] map = LineEndRegex().Split(level.Frames[frame].Map);
				if (map[position.Top][position.Left] is '#')
				{
					lastMovementKey = ConsoleKey.UpArrow;
					position = levels[levelIndex].StartPosition;
					lives--;
					if (lives <= 0)
					{
						goto YouLose;
					}
				}
				await Console.SetCursorPosition(position.Left, position.Top + mapTop);
				await Console.Write(GetPlayerChar());
				DateTime start = DateTime.Now;
				while (DateTime.Now - start < level.Frames[frame].Delay)
				{
					while (await Console.KeyAvailable())
					{
						switch ((await Console.ReadKey(true)).Key)
						{
							case ConsoleKey.UpArrow:
								lastMovementKey = ConsoleKey.UpArrow;
								if (map[position.Top - 1][position.Left] is ' ' or '@' or '#')
								{
									lastMovementKey = ConsoleKey.UpArrow;
									await Console.SetCursorPosition(position.Left, position.Top + mapTop);
									await Console.Write(' ');
									position.Top--;
								}
								break;
							case ConsoleKey.DownArrow:
								lastMovementKey = ConsoleKey.DownArrow;
								if (map[position.Top + 1][position.Left] is ' ' or '@' or '#')
								{
									await Console.SetCursorPosition(position.Left, position.Top + mapTop);
									await Console.Write(' ');
									position.Top++;
								}
								break;
							case ConsoleKey.LeftArrow:
								lastMovementKey = ConsoleKey.LeftArrow;
								if (map[position.Top][position.Left - 1] is ' ' or '@' or '#')
								{
									await Console.SetCursorPosition(position.Left, position.Top + mapTop);
									await Console.Write(' ');
									position.Left--;
								}
								break;
							case ConsoleKey.RightArrow:
								lastMovementKey = ConsoleKey.RightArrow;
								if (map[position.Top][position.Left + 1] is ' ' or '@' or '#')
								{
									await Console.SetCursorPosition(position.Left, position.Top + mapTop);
									await Console.Write(' ');
									position.Left++;
								}
								break;
							case ConsoleKey.Escape:
								return;
						}
						if (map[position.Top][position.Left] is '@')
						{
							frame = 0;
							levelIndex++;
							if (levelIndex >= levels.Length)
							{
								goto YouWin;
							}
							else
							{
								position = levels[levelIndex].StartPosition;
								await Console.Clear();
								goto NextLevel;
							}
						}
						else if (map[position.Top][position.Left] is '#')
						{
							lastMovementKey = ConsoleKey.UpArrow;
							position = levels[levelIndex].StartPosition;
							lives--;
							if (lives <= 0)
							{
								goto YouLose;
							}
							await Console.SetCursorPosition(position.Left, position.Top + mapTop);
							await Console.Write(GetPlayerChar());
						}
						else
						{
							await Console.SetCursorPosition(position.Left, position.Top + mapTop);
							await Console.Write(GetPlayerChar());
						}
					}
				}
				frame++;
				if (frame >= level.Frames.Length)
				{
					frame = 0;
				}
			}
			if (escape)
			{
				return;
			}
		YouWin:
			await Console.Clear();
			await Console.WriteLine("You Win!");
			await Console.WriteLine("Press [enter] to continue...");
			await PressEnterToContinue();
			return;
		YouLose:
			await Console.Clear();
			await Console.WriteLine("You Lose!");
			await Console.WriteLine("Press [enter] to continue...");
			await PressEnterToContinue();
			return;

			char GetPlayerChar() =>
				lastMovementKey switch
				{
					ConsoleKey.UpArrow => '^',
					ConsoleKey.DownArrow => 'v',
					ConsoleKey.LeftArrow => '<',
					ConsoleKey.RightArrow => '>',
					_ => throw new NotImplementedException(),
				};

			async Task PressEnterToContinue()
			{
			GetEnterOrEscape:
				Console.CursorVisible = false;
				switch ((await Console.ReadKey(true)).Key)
				{
					case ConsoleKey.Enter: break;
					case ConsoleKey.Escape: return;
					default: goto GetEnterOrEscape;
				}
			}
		}
		finally
		{
			Console.CursorVisible = true;
			await Console.Clear();
			await Console.Write("Bound was closed.");
			await Console.Refresh();
		}
	}

	[GeneratedRegex(@"\n|\r\n")]
	private static partial Regex LineEndRegex();
}
